﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DTO;
using DAO;
using BUS;
using System.Data.SqlClient;
namespace GUI
{
    public partial class DocGia : UserControl
    {
        public DocGia()
        {
            InitializeComponent();
        }
        private DocGiaDTO _docGia= new DocGiaDTO();
     

        //Hàm phụ trợ-----------------------------------
        //private int _duoiMaDG= 1;
        private StringBuilder maDG= new StringBuilder();
        public delegate void GetString(String str);
        public GetString MyGetData;

        private void LoadData()
        {
            cbLoaiDocGia.DataSource = LoaiDocGiaDAO.TimTatCaLoaiDG();
            cbLoaiDocGia.DisplayMember = "TenLoaiDG";
            cbLoaiDocGia.ValueMember = "MaLoaiDG";
            dGVDocgia.DataSource = DocGiaBUS.TimTatCaDocGia();
            

        }
        private bool CheckDaDien()
        {
            if (tbDiaChi.Text==""||tbEmail.Text==""||tbHoten.Text==""||tbSothe.Text==""||tbTienNo.Text==""||cbLoaiDocGia.Text==""||dTimeNgayHetHan.Text==""||dTimeNgayLap.Text==""||dTimeNgaySinh.Text=="")
            {
                return false;
            }
            return true;
        }
        private void UploadData()//Tao DTO
        {
           
                _docGia.DiaChi = tbDiaChi.Text;
                _docGia.Email = tbEmail.Text;
                _docGia.HoTen = tbHoten.Text;
                _docGia.MaLoaiDG = cbLoaiDocGia.SelectedValue.ToString();
                _docGia.NgayCap = DateTime.Parse(dTimeNgayLap.Value.ToString());
                _docGia.NgayHetHan = DateTime.Parse(dTimeNgayHetHan.Value.ToString());
                _docGia.NgaySinh = DateTime.Parse(dTimeNgaySinh.Value.ToString());
                _docGia.SoThe = tbSothe.Text;
                _docGia.TongTienNo = decimal.Parse(tbTienNo.Text);
                           
        }
        private void tbThongbaoDocGia_TextChanged(object sender, EventArgs e)
        {
            if(MyGetData!=null)
            {
                MyGetData(tbThongbaoDocGia.Text);
            }
        }

        //Ham thiết kế-----------------------------------
        private void DocGia_Load(object sender, EventArgs e)
        {
            LoadData();
            dTimeNgayLap.Value = DateTime.Now;
            dTimeNgaySinh.Value = DateTime.Now;
            tbSothe.Text = TaoMaNgauNhien();
        }

        private void dGVDocgia_SelectionChanged(object sender, EventArgs e)
        {
            if (this.dGVDocgia.CurrentRow!=null)
            {
                try
                {
                    tbSothe.Text = dGVDocgia.SelectedRows[0].Cells[0].Value.ToString();
                    tbHoten.Text =dGVDocgia.SelectedRows[0].Cells[1].Value.ToString();
                    dTimeNgaySinh.Text =dGVDocgia.SelectedRows[0].Cells[2].Value.ToString();
                    tbDiaChi.Text =dGVDocgia.SelectedRows[0].Cells[3].Value.ToString();
                    tbEmail.Text =dGVDocgia.SelectedRows[0].Cells[4].Value.ToString();
                    cbLoaiDocGia.Text =dGVDocgia.SelectedRows[0].Cells[5].Value.ToString();
                    dTimeNgayLap.Text =dGVDocgia.SelectedRows[0].Cells[6].Value.ToString();
                    dTimeNgayHetHan.Text =dGVDocgia.SelectedRows[0].Cells[7].Value.ToString();
                    tbTienNo.Text =dGVDocgia.SelectedRows[0].Cells[8].Value.ToString();
                }
                catch (Exception)
                {                    
                    
                }
            }
        }

        private void btThem_Click(object sender, EventArgs e)
        {
            if (CheckDaDien())
            {
                // Check tuổi
                int tuoi = (int)(DateTime.Now.Subtract(dTimeNgaySinh.Value).TotalDays / 365);
                if (tuoi > StaticVariables.TuoiToiDa || tuoi < StaticVariables.TuoiToiTieu)
                {
                    // Thong bao
                    MessageBox.Show("Tuổi độc giả phải lớn hơn " + StaticVariables.TuoiToiTieu.ToString() + " và nhỏ hơn " + StaticVariables.TuoiToiDa.ToString(), "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    dTimeNgaySinh.Value = DateTime.Now;
                    return;
                }
                if (DocGiaDAO.CheckDocGiaByID(tbSothe.Text))
                {
                    tbThongbaoDocGia.Text = "Mã đọc giả đã tồn tại.";                  
                }
                else
                {
                    UploadData();
                    if (DocGiaBUS.ThemDocGia(_docGia))
                    {
                        LoadData();
                        tbThongbaoDocGia.Text = "Bạn đã thêm thành công.";
                    }
                    else
                    {
                        tbThongbaoDocGia.Text = "Thêm đọc giả thất bại (có thể mã bị trùng).";
                    }
                }                
            }
            else
            {
                tbThongbaoDocGia.Text = "Bạn chưa điền đầy đủ thông tin đọc giả.";
            }
        }

        private void btXoa_Click(object sender, EventArgs e)
        {
            if (DocGiaDAO.CheckDocGiaByID(tbSothe.Text))
            {
                if (DocGiaBUS.XoaDocGia(tbSothe.Text))
                {
                    LoadData();
                    tbThongbaoDocGia.Text = "Xóa thành công.";
                    
                }
                else
                {
                    tbThongbaoDocGia.Text = "Xóa thất bại.Lỗi xóa!";
                }
            }
            else
            {
                tbThongbaoDocGia.Text = "Số thẻ đọc giả muốn xóa không tông tại.";
            }
        }

        private void btSua_Click(object sender, EventArgs e)
        {
            if (CheckDaDien())
            {

                UploadData();

                if (DocGiaBUS.SuaDocGia(_docGia))
                {
                    LoadData();
                    tbThongbaoDocGia.Text = "Sửa thành công.";                   
                }
                else
                {
                    tbThongbaoDocGia.Text = "Sửa thất bại.";
                }
            }
            else
            {
                tbThongbaoDocGia.Text = "Bạn chưa điền đầy đủ thông tin của đọc giả.";
            }
        }

        private void btReFresh_Click(object sender, EventArgs e)
        {
            LoadData();
            tbDiaChi.Text ="";  
            tbEmail.Text = ""; 
            tbHoten.Text = ""; 
            tbSothe.Text = ""; 
            tbTienNo.Text = "";
            cbLoaiDocGia.Text = ""; 
            dTimeNgayHetHan.Value = DateTime.Now; 
            dTimeNgaySinh.Value = DateTime.Now;
        }

        private void dTimeNgayLap_ValueChanged(object sender, EventArgs e)
        {
            dTimeNgayHetHan.Value = dTimeNgayLap.Value.AddDays((double)StaticVariables.ThoiHanThe);
        }

        private String TaoMaNgauNhien()
        {
            string returnid = "";
            Random rd = new Random();
            do
            {
                returnid = cbLoaiDocGia.SelectedValue.ToString() + DateTime.Now.Year.ToString().Substring(2, 2) + rd.Next(1, 99999).ToString().PadLeft(5, '0');
                if (returnid.Length != 10)
                {
                    return "";
                }
            }
            while (DocGiaDAO.CheckDocGiaByID(returnid));
            return returnid;
        }

        private void cbLoaiDocGia_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                tbSothe.Text=TaoMaNgauNhien();
            }
            catch (Exception)
            {                                
            }
        }

        private void dTimeNgaySinh_ValueChanged(object sender, EventArgs e)
        {

        }
    }
}
